// 给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。

#include<bits/stdc++.h>
#include<string>
#include<vector>
#include<list>
#include<unordered_map>
#include<set>
#include<queue>
using namespace std;
// 看了题解，动态规划

// 执行用时：
// 4 ms
// , 在所有 C++ 提交中击败了
// 82.97%
// 的用户
// 内存消耗：
// 11.4 MB
// , 在所有 C++ 提交中击败了
// 77.10%
// 的用户

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int res = nums[0];
        int imax = nums[0];
        int imin = nums[0];
        for(int i=1;i<nums.size();i++){
            int temp = imax;
            imax = max(max(imax*nums[i],nums[i]),imin*nums[i]);
            imin = min(min(imin*nums[i],nums[i]),temp*nums[i]);
            res = max(imax,res);
        }
        return res;
    }
};